/**    
 * @Title: JqGridUtil.java  
 * @Package com.zfsoft.util  
 * @Description: 
 * @author yhx   
 * @date 2011-4-7 下午02:13:06  
 * @version V1.0    
 */

package com.company.emenu.base;

import net.sf.json.JSONObject;
import net.sf.json.JSONArray;

import com.company.emenu.util.BeanUtils;

/**
 * @Description:提供与jqGrid相关功能操作
 * @author yhx
 */
public class JqGridUtil {

	/**
	 * 拼装jqGrid查询语句
	 * 
	 * @param 通过filters获取到的json格式字符串
	 * @return 十六进制字符串
	 */
	public static String hqlWhereByFilters(String oTableName,  String filters) {
		if (BeanUtils.isEmpty(filters)){
			return "";
		}
		JSONObject jo= JSONObject.fromObject(filters);
		String hqlWhere="";
		String hqlContion="";
		String hqlGroupOp="";
		try{
		hqlGroupOp=jo.getString("groupOp");
		JSONArray o =(JSONArray)jo.get("rules");
		if (!o.isEmpty()){
			for(int i=0;i<o.size();i++){
//				hqlContion= " "  + hqlGroupOp  + " " + o.getJSONObject(i).getString("field");
//				hqlContion=hqlContion + " " + o.getJSONObject(i).getString("op");
//				hqlContion=hqlContion + " '" + o.getJSONObject(i).getString("data") +"'";
				if  (i==0){
					hqlContion=" AND ";
				}else{
					hqlContion=" "  + hqlGroupOp ;
				}
				hqlContion=hqlContion + " " +
						gethqlOp(oTableName, 
						o.getJSONObject(i).getString("field"),
						o.getJSONObject(i).getString("op"),
						o.getJSONObject(i).getString("data"));
				hqlWhere=hqlWhere+hqlContion;
			}
		}
		}catch(Exception ex){
			hqlWhere="";
			ex.printStackTrace();
        }
		return hqlWhere;
	}
	
	/**
	 * 解析jqGrid中查询条件符号的转换
	 * 
	 * @param 字符串
	 * @return 十六进制字符串
	 */
	private static String gethqlOp(String oTableName,String strField,String strOp,String strData) {
		String hqlOp="=";
		String hqlData=strData;
		String hql="";
		try{
		if( strData.equals("")){

		}
  		if (strOp.equals("eq")) {
  				//eq 等于 
  				hqlOp="=";
			}else if(strOp.equals("ne")){
				//ne 不等
				hqlOp="!=";
			}else if(strOp.equals("lt")){
				//lt 小于  
				hqlOp="<";
			}else if(strOp.equals("le")){
				//le 小于等于
				hqlOp="<=";
			}else if(strOp.equals("gt")){
				//gt 大于 
				hqlOp=">";
			}else if(strOp.equals("ge")){
				//ge 大于等于 
				hqlOp=">=";
			}else if(strOp.equals("bw")){
				//bw 开始于 
				hqlOp="like";
				hqlData=strData + "%";
			}else if(strOp.equals("bn")){
				//bn 不开始于
				hqlOp="not like";
				hqlData=strData + "%";
			}else if(strOp.equals("in")){
				//in 属于          需要重新处理
				hqlOp="like";
				hqlData=strData + "%";
			}else if(strOp.equals("ni")){
				//ni 不属于        需要重新处理
				hqlOp="not like";
				hqlData=strData + "%";
			}else if(strOp.equals("ew")){
				//ew 结束于 
				hqlOp="like";
				hqlData="%" + strData ;
			}else if(strOp.equals("en")){
				//en 不结束于 
				hqlOp="not like";
				hqlData="%" + strData ;
			}else if(strOp.equals("cn")){
				//cn 包含
				hqlOp="like";
				hqlData="%" + strData + "%" ;
			}else if(strOp.equals("nc")){
				//nc 不包含 
				hqlOp="not like";
				hqlData="%" + strData + "%" ;
			}else{
				hql=" and 1=2";
				return hql;
			}
  			if (!oTableName.equals("")){
  				hql=oTableName + "." + strField + " " + hqlOp + "'" + hqlData + "'";
  			}else{
  				hql=strField + " " + hqlOp + "'" + hqlData + "'";
  			}
  		
		}catch(Exception ex){
			hql=" and 1=2";
			ex.printStackTrace();
        }
		
		return hql;
	}
}

